/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package artaza.controlador;

/**
 *
 * @author AGM
 */
import artaza.persistencia.Finca;
import artaza.service.*;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.repackaged.org.json.JSONException;
import com.google.appengine.repackaged.org.json.JSONObject;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class FincaController {

    private FincaService fincaService;

    @Autowired
    @Required
    public void setFincaService(FincaService fincaService) {
        this. fincaService =  fincaService;
    }

    @RequestMapping(value = "/adminSecured/listadof", method = RequestMethod.GET)
    public String doShowFinca(Model model) {

        final Collection<Finca> espacios =  fincaService.getAllFincas();
        model.addAttribute("espacios",espacios);
        return "/listadof";
    }

    @RequestMapping(value = "/adminSecured/crear_finca", method = RequestMethod.GET)
    public String doCrearFinca(
            @RequestParam("nombre") String nombre,
            @RequestParam("capacidad") String capacidad,
            @RequestParam("comentarios") String comentarios,
            @RequestParam("telefono") String telefono,
            @RequestParam("correo") String correo,
            Model model) {

	if (nombre.trim().length()== 0 || capacidad.length()==0 || correo.length()==0) {
            return "/fincas";
	}

        int cap=0;
        try{
             cap = Integer.parseInt(capacidad);//si la cantidad es una letra
        }catch(Exception exc){
        }
       
        final Finca f = new Finca(nombre,cap,correo,telefono,comentarios);
        fincaService.create(f);
        return "redirect:listadof";
    }

   @RequestMapping(value = "/adminSecured/borrar_finca", method = RequestMethod.POST)
   public String doBorrarFinca(@RequestParam("id_finca") String id_finca, Model model) {
        fincaService.remove(KeyFactory.stringToKey(id_finca));
        return "redirect:listadof";
    }

    @RequestMapping(value = "/adminSecured/ir_crear_finca", method = RequestMethod.GET)
    public String doIrFinca(){
        return "/fincas";
    }

    @RequestMapping(value = "/adminSecured/busquedaf", method = RequestMethod.GET)
    public String doBuscarFincaNombre(@RequestParam("criterio") int criterio,
            @RequestParam("palabra") String palabra,Model model){

        String error = "acierto";
            if(palabra.length()==0){
                return "redirect:listadof";
            }
        try{
        List<Finca> espacios =  fincaService.buscar(criterio,palabra);
        model.addAttribute("espacios", espacios);
        }catch (Exception e) {
            error= "error";
        }finally{
            model.addAttribute("error", error);
            return "/resultado_busqueda_f";
        }

    }

    @RequestMapping(value = "/adminSecured/buscar_fechaf", method = RequestMethod.POST)
    public String doBuscarFincaFecha(@RequestParam("criterio") int criterio,
            @RequestParam("fechabuscar") String fechabuscar,Model model){

        String error = "acierto";
            if(fechabuscar.length()==0){
                return "redirect:listadof";
            }
        try{
        List<Finca> espacios =  fincaService.buscar(criterio,fechabuscar);
        model.addAttribute("espacios", espacios);
        }catch (Exception e) {
            error= "error";
        }finally{
            model.addAttribute("error", error);
            return "/resultado_busqueda_f";
        }

    }

    @RequestMapping(value = "/adminSecured/modificarf", method = RequestMethod.GET)
     public String doModificarFinca(@RequestParam("id_finca") String id_finca,
            @RequestParam("nombre") String nombre,
            @RequestParam("capacidad") int capacidad,
            @RequestParam("telefono") String telefono,
            @RequestParam("correo") String correo,
            @RequestParam("comentarios") String comentarios,
            Model model){

        Finca f =  fincaService.findByPK(KeyFactory.stringToKey(id_finca));

        if(f.getNombre().compareTo(nombre)!=0){
            f.setNombre(nombre);
        }
        if(f.getCorreo().compareTo(correo)!=0){
            f.setCorreo(correo);
        }
        if(f.getTelefono().compareTo(telefono)!=0){
            f.setTelefono(telefono);
        }
        if(f.getComentarios().compareTo(comentarios)!=0){
            f.setComentarios(comentarios);
        }
        if(f.getCapacidad()!=capacidad){
            f.setCapacidad(capacidad);
        }
       // if(f.getOcupado().contains(ocupado)==false){
         //   f.getOcupado().add(ocupado);
        //}

        fincaService.update(f);
        return "redirect:listadof";

    }

    @RequestMapping(value = "/adminSecured/ir_modificarf", method = RequestMethod.GET)
    public String doIrModificarFinca(@RequestParam("id_finca") String id_finca,Model model){
         Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));
         model.addAttribute("f", f);
         return "/modificarf";
    }
    @RequestMapping(value = "/adminSecured/ir_anadir_fechaf", method = RequestMethod.POST)
    public String doIrAnadirFecha (@RequestParam("id_finca") String id_finca,Model model){
        Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));
         model.addAttribute("f", f);
         return "/calendario";
    }
    @RequestMapping(value = "/adminSecured/anadir_fechaf", method = RequestMethod.POST)
    public @ResponseBody String AnadirFecha (@RequestParam("idfinca") String id_finca,
                               @RequestParam("fecha") String fechaocupada){

        Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));
        if(fechaocupada.length()== 0){
            return datosFecha("").toString();
        }

        if (f.getOcupado().contains(fechaocupada))
        {
           return datosFecha("").toString();
        }else{
        f.getOcupado().add(fechaocupada);
            return datosFecha(fechaocupada).toString();
        } 
    }

    @RequestMapping(value = "/adminSecured/borrar_fechaf", method = RequestMethod.POST)
    public String borrarFecha (@RequestParam("id_finca") String id_finca,
                                @RequestParam("fechaaborrar") String fechaaborrar,
                                Model model){
        Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));
        if (f.getOcupado().contains(fechaaborrar))
        {
           f.getOcupado().remove(fechaaborrar);
        }
        return "redirect:listadof";
        }

     private JSONObject datosFecha(String fechaocupada) {
         JSONObject json = new JSONObject();
         try{
         json.put("fechaocupada", fechaocupada);
         } catch (JSONException ex) {
        }
         return json;

     }

}
